import { defineStore } from "pinia";
import { store } from "@/store";
// VueUse是基于Vue3的Composition API的实用函数的集合，useStorage是其中的一个函数。我们可以使用useStorage来实现我们的localStorage功能。
import { useStorage } from "@vueuse/core"
// 引入api
import { loginApi,logoutApi } from "@/api/auth";
// 引入TS
import { LoginData } from "@/api/auth/types";

export const useUserStore = defineStore("user", () => {
    const userInfo = ref({})
     // 设置token为共享向状态 初始化pinia的时候，就先从缓存中读取
     const token = useStorage("accessToken", "");
  /**
   * 登录
   *
   * @param {LoginData}
   * @returns
   */
  function login(loginData: LoginData) {
    return new Promise<void>((resolve, reject) => {
      console.log('response.data',loginData);
      loginApi(loginData)
        .then((response) => {
          const { tokenType, accessToken } = response.data;
          token.value = tokenType + " " + accessToken; // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
          console.log('token',token);
          resolve();
        })
        .catch((error) => {
          reject(error);
        });
    });
  }
  
  // user logout
  function logout() {
    return new Promise<void>((resolve, reject) => {
      logoutApi()
        .then(() => {
          token.value = "";
          location.reload(); // 清空路由
          resolve();
        })
        .catch((error) => {
          reject(error);
        });
    });
  }
    // remove token
    function resetToken() {
        return new Promise<void>((resolve) => {
          token.value = "";
        //   resetRouter();
          resolve();
        });
      }
    // // function函数 → actions
    // function increment() {
       
    // }
    return { userInfo, token,login,logout,resetToken  };
})
// 非setup
export function useUserStoreHook() {
    return useUserStore(store);
  }
  